/**
 * Creat with IntelliJ IDEA
 * Description:
 * User:WZW
 * Date:2022-04-05
 * Time:13:39
 */

package test;

import java.io.*;
import java.net.ServerSocket;
import java.net.Socket;
import java.util.Date;

class ServerThread extends Thread{
    //用于与客户端进行交流
    Socket socket;
    DataOutputStream out = null;
    DataInputStream in = null;

    public ServerThread(Socket socketAtServer) {
        this.socket = socketAtServer;//获得套接字
        try {
            //由套接字对象获得输入输出流
            out = new DataOutputStream(socket.getOutputStream());
            in = new DataInputStream(socket.getInputStream());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    @Override
    public void run() {
        try {
            while (true){
                //读入客户端的消息
                System.out.println("正在等待消息……");
                String read = in.readUTF();
                System.out.println(("服务器端接收消息：" + read));
                System.out.println("服务器正在回复消息……");
                // 当客户端输入“Time”命令时，返回服务器当前的时间。
                if (read.compareTo("Time")==0){
                    Date time = new Date();//使用Date类获取当前时间
                    String s = "服务器当前的时间为："+time;
                    out.writeUTF(s);
                }
                // 当客户端输入“Exit”命令时，返回“Bye”并跳出循环
                else if (read.compareTo("Exit")==0){
                    out.writeUTF("Bye");//服务器端向客户端发出消息
                    System.out.println("服务器消息回复完毕！");
                    break;
                }
                // 当客户端输入其他命令时，返回该命令。
                else {
                    out.writeUTF(read);
                }
                System.out.println("服务器消息回复完毕！");
            }
            socket.close();//关闭套接字
        } catch (IOException e) {
            System.out.println("连接断开");
        }

    }
}

public class server {
    public static void main(String[] args) {
        ServerSocket server = null;//创建一个ServerSocket对象
        Socket socketAtServer = null;
        while (true){
            try {
                server = new ServerSocket(9870);//server在9870端口监听客户请求
                System.out.println("服务器启动完毕");
            } catch (IOException e) {
                System.out.println("服务器启动出错……请重新启动");
            }

            try {
                socketAtServer = server.accept();//使用accept()来接收客户端的请求，并生成一个Socket对象
                System.out.println("来自:" + socketAtServer.getInetAddress() + "的客户端");
            } catch (IOException e) {
                System.out.println("服务器正在等待客户端连接");
            }

            if (socketAtServer != null) {
                ServerThread serverThread = new ServerThread(socketAtServer);
                serverThread.start(); //为每个客户端启动一个专门的线程
            } else {
                continue;
            }
        }

    }

}
